<?php

/*
 * modelo perfil el cual contiene en su tabla las variables idPerfil,Nombre,Apellido,Fecha_Nacimiento,Fecha_ultimo_acceso,
 *  Fecha_crecion, Fecha_eliminacion, Ubicacion,Sexo,idUsuario,Estado,Timezone, Tiene_notificacion.
 */

Class Perfil_model extends CI_Model {

    function __construct() {
        parent::__construct();
        $this->load->library('interes');
    }

    /**
     * Esta funcion devuelve los datos del perfil del usuario recibiendo la variable id
     * @param type $id
     * @return boolean 
     */
    function showProfile($id) {

        $this->db->select('*');
        $this->db->from('usuario');
        $this->db->where("idUsuario = '" . $id . "'");
        $query = $this->db->get();

        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return false;
        }
    }

    /**
     * Registra el perfil cuando el usuario se crea
     * @param type $idUsuario
     * @param type $email
     * @param type $nickname
     * @return type 
     */
    function registerProfile($idUsuario, $email, $nickname) {

        $mysqldatetime = date("Y-m-d H:i:s");

        $data = array('per_nombre' => '',
            'per_apellido' => '',
            'per_fecha_creacion' => $mysqldatetime,
            'usr_id' => $idUsuario,
            'usr_email' => $email,
            'usr_nickname' => $nickname
        );
        return $this->db->insert('cl_perfil', $data);
    }

    function perfilImage($idUsuario, $email, $nickname) {

        $data = array('fpe_link' => '1.jpeg',
            'usr_id' => $idUsuario,
            'usr_email' => $email,
            'usr_nickname' => $nickname
        );


        return $this->db->insert('cl_foto_perfil', $data);
    }

    /**
     * Esta funcion retorna la url de la foto de perfil del usuario
     * @param type $usr_id
     * @return type 
     */
    function getImage($usr_id) {

        $this->db->select('fpe_link');
        $this->db->from('cl_foto_perfil');
        $this->db->where('usr_id', $usr_id);
        $query = $this->db->get();

        foreach ($query->result() as $row) {
            return $row->fpe_link;
        }
    }

    /**
     * Esta función retorna el nombre del usuario
     * @param type $usr_id
     * @return type 
     */
    function getNames($usr_id) {

        $this->db->select('per_nombre');
        $this->db->from('cl_perfil');
        $this->db->where('usr_id', $usr_id);
        $query = $this->db->get();

        foreach ($query->result() as $row) {
            return $row->per_nombre;
        }
    }

    /**
     * Esta función retorna el apellido del usuario
     * @param type $usr_id
     * @return type 
     */
    function getLastname($usr_id) {

        $this->db->select('per_apellido');
        $this->db->from('cl_perfil');
        $this->db->where('usr_id', $usr_id);
        $query = $this->db->get();

        foreach ($query->result() as $row) {
            return $row->per_apellido;
        }
    }

    /**
     * Esta función retorna la presentación del usuario
     * @param type $usr_id
     * @return type 
     */
    function getPresentation($usr_id) {

        $this->db->select('per_presentacion');
        $this->db->from('cl_perfil');
        $this->db->where('usr_id', $usr_id);
        $query = $this->db->get();

        foreach ($query->result() as $row) {
            return $row->per_presentacion;
        }
    }

    /**
     * Función que guarda en la base de datos el nombre del usuario
     * @param type $usr_id
     * @param type $per_nombre
     */
    function setName($usr_id, $per_nombre) {

        $data = array('per_nombre' => $per_nombre);
        $this->db->where('usr_id', $usr_id);
        $this->db->update('cl_perfil', $data);
    }

    /**
     * Función que guarta el apellido del usuario en la base de datos
     * @param type $usr_id
     * @param type $per_apellido 
     */
    function setLastname($usr_id, $per_apellido) {

        $data = array('per_apellido' => $per_apellido);
        $this->db->where('usr_id', $usr_id);
        $this->db->update('cl_perfil', $data);
    }

    /**
     * Función que guarda la presentacion del usuario en la base de datos
     * @param type $usr_id
     * @param type $per_presentacion 
     */
    function setPresentation($usr_id, $per_presentacion) {

        $data = array('per_presentacion' => $per_presentacion);
        $this->db->where('usr_id', $usr_id);
        $this->db->update('cl_perfil', $data);
    }

    /**
     * Esta función guarda la url del usuario en la base de datos
     * @param type $usr_id
     * @param type $fpe_link 
     */
    function setImage($usr_id, $fpe_link) {

        $data = array('fpe_link' => $fpe_link);
        $this->db->where('usr_id', $usr_id);
        $this->db->update('cl_foto_perfil', $data);
    }

    /**
     * Función privada que retorna la id del perfil del usuario
     * @param type $usr_id
     * @return type 
     */
    private function getPer_id($usr_id) {
        $this->db->select('per_id');
        $this->db->from('cl_perfil');
        $this->db->where('usr_id', $usr_id);
        $query = $this->db->get();
        foreach ($query->result() as $row) {
            return $row->per_id;
        }
    }

    /**
     * Función privada que consulta los datos de un interes en particular, los guarda en un objeto del tipo interes y lo retorna
     * @param type $int_id
     * @return \interes 
     */
    private function getDataInterest($int_id) {
        $interes = new interes();
        $this->db->select('int_nombre, int_descripcion, int_id');
        $this->db->from('cl_intereses');
        $this->db->where('int_id', $int_id);
        $query = $this->db->get();
        foreach ($query->result() as $row) {
            $interes->setInt_id($row->int_id);
            $interes->setInt_nombre($row->int_nombre);
            $interes->setInt_descripcion($row->int_descripcion);
            return $interes;
        }
    }

    /**
     * Función que consulta todos los intereses del usuario llamando a la función getDataInterest, les agrega el nivel del
     * interes y retorna un arreglo lleno de objetos del tipo interes
     * @param type $usr_id
     * @return type 
     */
    function getInterest($usr_id) {
        $per_id = $this->getPer_id($usr_id);
        $this->db->select('int_id, intp_nivel_interes');
        $this->db->from('cl_intereses_has_cl_perfil');
        $this->db->where('per_id', $per_id);
        $query = $this->db->get();
        $interes = new interes();
        foreach ($query->result() as $row) {
            $interes = $this->getDataInterest($row->int_id);
            $interes->setIntp_nivel_interes($row->intp_nivel_interes);
            $data[] = $interes;
        }
        return $data;
    }

    /**
     * Funcion que borra un interes de un usuario determinado en la base de datos
     * @param type $usr_id
     * @param type $int_id 
     */
    function deleteInterest($usr_id, $int_id) {
        $per_id = $this->getPer_id($usr_id);
        $this->db->where('usr_id', $usr_id);
        $this->db->where('int_id', $int_id);
        $this->db->delete('cl_intereses_has_cl_perfil');
    }

    /**
     * Función que asigna un interes a un usuario
     * @param type $usr_id
     * @param type $interest 
     */
    function assingInterest($usr_id, $interest) {
        $interes = new interes();
        $interes = $interest;
        $per_id = $this->getPer_id($usr_id);
        $data = array(
            'int_id' => $interes->getInt_id(),
            'per_id' => $per_id,
            'intp_nivel_interes' => $interes->getIntp_nivel_interes()
        );
        $this->db->insert('cl_intereses_has_cl_perfil', $data);
    }

    /**
     * Función que retorna todos los intereses
     * @return \interes 
     */
    function getAllInterest() {
        $this->db->select('int_id, int_nombre, int_descripcion');
        $this->db->from('cl_intereses');
        $query = $this->db->get();
        foreach ($query->result() as $row) {
            $interes = new interes();
            $interes->setInt_id($row->int_id);
            $interes->setInt_nombre($row->int_nombre);
            $interes->setInt_descripcion($row->int_descripcion);
            $data[] = $interes;
        }
        return $data;
    }

    /**
     * Función que retorna todos los intereses disponibles para un usuario en particular
     * @param type $usr_id
     * @return type 
     */
    function getInterestAvailables($usr_id) {
        $allInterest = $this->getAllInterest();
        $userInterest = $this->getInterest($usr_id);
        for ($i = 0; $i < count($allInterest); $i++) {
            $aux = true;
            $interes1 = new interes();
            $interes1 = $allInterest[$i];
            for ($j = 0; $j < count($userInterest); $J++) {
                $interes2 = new interes();
                $interes2 = $userInterest[$i];
                if ($interes1->compareInterest($interes2)) {
                    $aux = false;
                }
            }
            if ($aux) {
                $data[] = $interes1;
            }
        }
        return $data;
    }

}

?>